﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BE;
using BE.SearchCriteria;
using System.Data.SqlClient;
using System.Data;

namespace DAL
{
    public class ArticulosCampañasDAL : BaseDAL
    {

        public List<ArticulosCampañaBE> BuscarArticulosCampaña(BaseSC pFiltroSC)
        {
            ArticulosCampañaSC wFiltroSC = (ArticulosCampañaSC)pFiltroSC;
            if (wFiltroSC == null)
                wFiltroSC = new ArticulosCampañaSC();

            List<ArticulosCampañaBE> wListaBE = null;
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@IdArticulo", wFiltroSC.IdArticulo));
                cmd.Parameters.Add(new SqlParameter("@IdPresentacion", wFiltroSC.IdPresentacion));
                cmd.Parameters.Add(new SqlParameter("@IdCampaña", wFiltroSC.IdCampaña));
                cmd.Parameters.Add(new SqlParameter("@IdRubro", wFiltroSC.IdRubro ));
                cmd.Parameters.Add(new SqlParameter("@Pagina", wFiltroSC.Pagina ));
                cmd.Parameters.Add(new SqlParameter("@Descripcion", wFiltroSC.Descripcion));
             
                cmd.CommandText = "obtenerArticulosPresentaciones_s";
                cnn.Open();
                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    Int32 idArticuloIndex = reader.GetOrdinal("IdArticulo");
                    Int32 IdRubroIndex = reader.GetOrdinal("IdRubro");

                    Int32 NombreIndex = reader.GetOrdinal("Nombre");
                    Int32 DescripcionIndex = reader.GetOrdinal("Descripcion");

                    Int32 FechaAltaIndex = reader.GetOrdinal("FechaAlta");
                    Int32 ImagenIndex = reader.GetOrdinal("Imagen");
                    Int32 IdPresentacionIndex = reader.GetOrdinal("IdPresentacion");

                    Int32 PresentacionIndex = reader.GetOrdinal("Presentacion");
                    Int32 PreFechaAltaIndex = reader.GetOrdinal("PreFechaAlta");
                    Int32 IdCampañaIndex = reader.GetOrdinal("IdCampaña");
                    Int32 PaginaIndex = reader.GetOrdinal("Pagina");
                    Int32 PrecioIndex = reader.GetOrdinal("Precio");

                    wListaBE = new List<ArticulosCampañaBE>();

                    while (reader.Read())
                    {
                        Object[] values = new Object[reader.FieldCount];
                        reader.GetValues(values);

                        ArticulosCampañaBE oElemBE = new ArticulosCampañaBE();

                        oElemBE.Articulo = new ArticuloBE();
                        oElemBE.Articulo.IdArticulo = Convert.ToInt32(values[idArticuloIndex]);
                        oElemBE.Articulo.Descripcion = Convert.ToString(values[DescripcionIndex]);
                        oElemBE.Articulo.Nombre = Convert.ToString(values[NombreIndex]);

                        //oElemBE.Articulo.Presentaciones = new List<PresentacionBE>();
                        oElemBE.Articulo.Presentacion = new PresentacionBE();

                        oElemBE.Articulo.Presentacion.Descripcion = Convert.ToString(values[PresentacionIndex]);
                        oElemBE.Articulo.Presentacion.IdPresentacion = Convert.ToInt32(values[IdPresentacionIndex]);
                        oElemBE.Precio = Convert.ToDecimal(values[PrecioIndex]);
                        oElemBE.Pagina = Convert.ToString(values[PaginaIndex]);

                        wListaBE.Add(oElemBE);
                    }
                }
                reader.Close();
                
            }
            return wListaBE;
        }

        public List<ArticulosCampañaBE> SeleccionarPorCampaña(BaseSC pFiltroSC)
        {
            ArticulosCampañaSC wFiltroSC = (ArticulosCampañaSC)pFiltroSC;
            if (wFiltroSC == null)
                wFiltroSC = new ArticulosCampañaSC();

            List<ArticulosCampañaBE> wListaBE = null;
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@IdCampaña", wFiltroSC.IdCampaña));

                cmd.CommandText = "ArticulosCampañas_GetByIdCampaña";
                cnn.Open();
                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    wListaBE = new List<ArticulosCampañaBE>();

                    while (reader.Read())
                    {
                        ArticulosCampañaBE oElemBE = new ArticulosCampañaBE();
                        oElemBE.IdCampaña = Convert.ToInt32(reader["IdCampaña"]);
                        oElemBE.Articulo = new ArticuloBE();
                        oElemBE.Articulo.IdArticulo = Convert.ToInt32(reader["IdArticulo"]);
                        oElemBE.Articulo.Descripcion = Convert.ToString(reader["Descripcion"]);
                        oElemBE.Articulo.Nombre = Convert.ToString(reader["Nombre"]);
                        oElemBE.Articulo.Rubro = new RubroBE();
                        oElemBE.Articulo.Rubro.IdRubro = Convert.ToInt32(reader["IdRubro"]);
                        oElemBE.Articulo.Rubro.Descripcion = Convert.ToString(reader["Rubro"]);
                        oElemBE.Precio = Convert.ToDecimal(reader["Precio"]);
                        oElemBE.Pagina = Convert.ToString(reader["Pagina"]);

                        wListaBE.Add(oElemBE);
                    }
                }
                reader.Close();

            }
            return wListaBE;
        }

        public void ImportarArticulos(int pIdCampaña)
        {
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                try
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "ArticulosCampañas_Generar";
                    cmd.Parameters.Add(new SqlParameter("@IdCampaña", pIdCampaña));
                    
                    cnn.Open();
                    cmd.ExecuteNonQuery();                    
                }
                catch (Exception)
                {
                    throw;
                }

            }

        }

        public void Insertar(ArticulosCampañaBE pElemBE)
        {
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                try
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "ArticulosCampañas_i";
                    cmd.Parameters.Add(new SqlParameter("@IdCampaña", pElemBE.IdCampaña));
                    cmd.Parameters.Add(new SqlParameter("@IdArticulo", pElemBE.Articulo.IdArticulo));
                    cmd.Parameters.Add(new SqlParameter("@Precio", pElemBE.Precio));
                    cmd.Parameters.Add(new SqlParameter("@Pagina", pElemBE.Pagina));

                    cnn.Open();
                    cmd.ExecuteNonQuery();                    
                }
                catch (Exception)
                {
                    throw;
                }

            }
        }

        public void Modificar(ArticulosCampañaBE pElemBE)
        {
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                try
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "ArticulosCampañas_u";
                    cmd.Parameters.Add(new SqlParameter("@IdCampaña", pElemBE.IdCampaña));
                    cmd.Parameters.Add(new SqlParameter("@IdArticulo", pElemBE.Articulo.IdArticulo));
                    cmd.Parameters.Add(new SqlParameter("@Precio", pElemBE.Precio));
                    cmd.Parameters.Add(new SqlParameter("@Pagina", pElemBE.Pagina));

                    cnn.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (Exception)
                {
                    throw;
                }

            }
        }

        public void Eliminar(int pIdCampaña, int pIdArticulo)
        {
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                try
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "ArticulosCampañas_d";
                    cmd.Parameters.Add(new SqlParameter("@IdCampaña", pIdCampaña));
                    cmd.Parameters.Add(new SqlParameter("@IdArticulo", pIdArticulo));
                    cnn.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (Exception)
                {
                    throw;
                }

            }
        }
    }
}
